package org.bigjava.novelplatform.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.bigjava.novelplatform.entity.Books;
import org.bigjava.novelplatform.entity.Catalog;
import org.bigjava.novelplatform.entity.Chapter;
import org.bigjava.novelplatform.vo.*;

import java.util.HashMap;
import java.util.List;

/**
 * 公共功能service
 * @author ykh
 * @create 2022-03-23 21:58
 */
public interface CommonService {

    /**
     * 获取建议（查询热度靠前的书籍或作者）
     * @return
     */
    List<SearchBriefInfoVo> getSuggestVo();

    /**
     * 根据输入返回建议
     * @param input
     * @return
     */
    List<SearchBriefInfoVo> getSuggestVoByInput(String input);

    /**
     * 获取不同榜单类型的排名
     * @param type 排名类型
     * @param limit 分页
     * @return
     */
    @Deprecated
    List<Books> bookList(String type, Integer limit);

    /**
     * 排行
     * @param catalog
     * @param limit
     * @return
     */
    HashMap<String, List<BookOrderVo>> selectBookList(String catalog, Integer limit);

    /**
     * 排行分页
     * @param catalog
     * @param type
     * @param current
     * @param size
     * @return
     */
    Page<BookOrderPageVo> selectBookListPage(String catalog, String type, Integer current, Integer size);

    /**
     * 排行
     * @param catalog
     * @param orderType
     * @param current
     * @param size
     * @return
     */
    @Deprecated
    Page<Books> ranking(String catalog, String orderType, Integer current, Integer size);

    /**
     * 查询新书阅读排行
     * @param catalog 分类
     * @param orderType 限定条件
     * @param current 当前页位置
     * @param size 一页容量
     * @return
     */
    @Deprecated
    Page<Books> newBookRanking(String catalog, String orderType, Integer current, Integer size);


    /**
     * 根据组合条件，查询书籍，并且分页
     * @param queryCondition 查询条件
     * @param current 当前页
     * @param size 一页数据数
     * @return
     */
    Page<SimpleBookVo> bookListPage(QueryCriteriaPlus queryCondition, Integer current, Integer size);



    /**
     * 查询parent所有的后代分类
     * @param parent
     * @return
     */
    List<Catalog> selectAllChildCatalog(String parent);

    /**
     * 查询书籍的月度积分排名
     * @param bookId
     * @return
     */
    Integer selectScoreRanking(Integer bookId);

    /**
     * 获取书籍信息
     * @param bookId
     * @return
     */
    BookInfoVo getBookInfo(Integer bookId);


    /**
     * 查询当前书籍的月度积分和上一名差值
     * @param bookId
     * @return
     */
    Integer selectIntegralDifference(Integer bookId);

    /**
     * 根据id获取作者信息
     * @param writerId
     * @return
     */
    WriterInfoVo getWriterInfo(Integer writerId);

    /**
     * 获取作者书籍信息
     * @param writerId
     * @return
     */
    List<BookInfoVo> getWriterBook(Integer writerId);

    /**
     * 根据层级获取分类
     * @param level
     * @return
     */
    List<Catalog> getCatalogByLevel(Integer level);

    /**
     * 获取全部分类
     * @return
     */
    List<CatalogVo> getCatalogAll();



    /**
     * 获取书籍目录,在用户未登录的情况下
     * @param bookId
     * @return
     */
    List<ChapterVo> getChapterContents(Integer bookId);


    /**
     * 获取书籍部分信息
     * @param bookId
     * @return
     */
    BookInfoPortion getBookInfoportion(Integer bookId);

    String selectChapter(Integer bookId, Long chapterId);

    ChapterOrderVo selectChapterOrder(Integer bookId, Integer chapterOrder);


    /**
     * 通过章节id和段落序列id查询评论的用户
     * @param chapterId
     * @param paragraphLocation
     * @return
     */
   List<UserchaptersaysVo>  selectChapterSays(Long chapterId, Integer paragraphLocation);

    /**
     * 通过章节id和父评论id查询评论的用户
     * @param chapterId
     * @param conversationTargetId
     * @return
     */
    List<UserchaptersaysVo> selectChapterSaysZipin(Long chapterId, Integer conversationTargetId);

    /**
     * 查询章节信息
     * @param bookId
     * @param chapterId
     * @return
     */
    Chapter selectChapterObj(Integer bookId, Long chapterId);

    /**
     * 二级分类
     * @return
     */
    List<String> selectCatalogOne();


}
